package example.domain.web.nodriver;
import org.apache.commons.lang.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.text.pattern.PatternMatcher.matchesPattern;
import static org.hamcrest.text.pattern.Patterns.anyCharacterIn;
import static org.hamcrest.text.pattern.Patterns.exactly;
import static org.hamcrest.text.pattern.Patterns.sequence;
import static org.junit.Assert.assertThat;
public class ExceptionHandlingIntegrationTests {
@Test
public void shouldSeeErrorReferenceDisplayedOnThePage() throws Exception {
SpringDispatcherServlet servlet = SpringDispatcherServlet.create();
MockHttpServletResponse response = servlet.process(new MockHttpServletRequest("GET", "/bad"));
String redirectedUrl = response.getRedirectedUrl();
assertThat(redirectedUrl, matchesPattern(sequence("/error/", exactly(7, anyCharacterIn("A-Z0-9")))));
String errorRef = StringUtils.substringAfterLast(redirectedUrl, "/");
response = servlet.process(new MockHttpServletRequest("GET", redirectedUrl));
String html = response.getContentAsString();
Document document = Jsoup.parse(html);
Elements elements = document.select("#errorRef");
assertThat(elements.size(), equalTo(1));
assertThat(elements.first().text(), equalTo(errorRef));
}
}